package com.tedu.api;

import org.junit.Test;

/**
 * Java万物皆对象--->针对是面向对象--->不全是【八大基本数据类型】
 * 对象【类--创建对象，调用属性、方法】
 * 8个基础数据类型---本质类型---类---包装类【对象：通过点调用方法、属性】
 * 包装类不可以修改，final修饰类，无法继承
 * 八个包装类的方法基本是通用的
 *          int                Integer            java.long    继承Number
 *          long               Long               java.long    继承Number
 *          double             Double             java.long    继承Number
 *          short              Short              java.long    继承Number
 *          float              Float              java.long    继承Number
 *          byte               Byte               java.long    继承Number
 *          char               Char               java.long    继承Object
 *          boolean            Boolean            java.long    继承Object
 */
public class Packing {
    @Test
    public void test(){
        int i=1;  //不是面向对象
        Integer a=new Integer(i);//面向对象
        a.toString();
    }
    /**
     * 包装类API
     * 抽象类Number  父类：Integer、Long、Double、Short、Float、Byte
     * xxxValue抽象方法，把包装类转换成基本数据类型的方法
     * intValue方法    返回int变量
     * longValue方法    返回long变量
     * doubleValue方法    返回double变量
     * shortValue方法    返回short变量
     * floatValue方法    返回float变量
     * byteValue方法    返回byte变量
     * 需求：把以上的6个数据类型，转换包装类，输出基本数据类型
     */
    @Test
    public void testValue(){
        //int打包---包装类---取出---从包装类获取基础数据类型
        Integer i=new Integer("123");
        int is=i.intValue();  //包装类  类型转换为int返回

        Integer t=new Integer("123");
        int si=i.intValue();

        System.out.println("Integer包装类"+(is==si));
        //==  对比  值
        System.out.println("Integer包装类"+i.equals(t));
        //equals  对比对象  确定对象是否有值【包装类--实际值】  有实际值  对比
        //其他5个基础数据类型包装类--打包 拆包
        //JavaBean类中，大量存在【存整数型、浮点】



//        Long i1=new Long("123");
//        long is1=i.longValue();
//        Long t1=new Long("123");
//        long si1=i.longValue();
//        System.out.println("Long包装类"+(is1==si1));
//        System.out.println("Long包装类"+i.equals(t1));
//
//        Double i2=new Double("123");
//        double is2=i.doubleValue();
//        Double t2=new Double("123");
//        double si2=i.doubleValue();
//        System.out.println("Double包装类"+(is2==si2));
//        System.out.println("Double包装类"+i.equals(t2));
    }

    /**
     *  xxxValue  抽象方法--------6个基础数据类型的包装类
     *                           包装类，ValueOf("对应类型")
     *                           静态方法【打包、拆包】
     *  打包：对应的包装类中存对应的类型
     *  拆包：对应包装类：类型，去除
     */
    @Test
    public void testValueOf(){
        int i=Integer.valueOf("123");  //类名点出来：静态方法【Number抽象】
        double d=Double.valueOf("123.123");
        boolean b=Boolean.valueOf("true");
        char c=Character.valueOf('i');
        float f=Float.valueOf("F");
        long L=Long.valueOf("L");
        short S=Short.valueOf("S");
        byte b1=Byte.valueOf("B");
    }

    /**
     * parseXXX    静态方法  【重点：Servlet  JavaWeb】
     * 作用：将字符串转换为对应类型
     * 参数--字符串--给字符串转换为对应数据类型
     * 注意：字符串可以随便写，不可以随便解析成对应类型
     */
    @Test
    public void testParseXXX(){
        //1.把基本数据类型转换为字符串  2 转换为字符串
        String s=String.valueOf("2");
        //2.把字符串转换为基础数据类型方法    需要解析出来
        String s2="2";
        System.out.println(s2+"打桩");
        int i=Integer.parseInt(s2);
        //NumberFormatException  数值格式异常
        //需求：把s3-s6正确解析出来
     String s3="123.123";
     float f=Float.parseFloat(s3);
     String s4="true";
     boolean b=Boolean.parseBoolean(s4);
     String s5="10L";  //无法加L表示long  符合三种类型：Integer，Byte，Short
     //long l=Long.parseLong(s5);
     String s6="a";    //Character  字符类型的包装类，无法解析
      /*byte by=Byte.parseByte(s6);
        System.out.println(byt);*/
     //总结：1.字符类，无法正确的解析成对应类型，不存在char类型
     //     2.字面量L/F，认为这是一个字符串，解析失败

    }
    /**
     * 包装类自动拆装箱
     * JDK1.5  新特性  2004
     * JDK1.5之前没有自动拆装箱
     */
    @Test
    public void test01(){
        //JDK1.5  之前
        Integer in=Integer.valueOf("i");//输入类型转换为Integer
        int i=in.intValue();//把包装好的类型，基础数据类型取出
        //JDK1.5  之后    定义方法编译器认可的，并非JVM虚拟机认可！
        Integer it=1;    //装箱
        int is=it;    //拆箱
        //自动拆装箱实际上，把拆箱与装箱的步骤交给idea执行
    }
}
